/*
 * Copyright 2018 JDCLOUD.COM
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http:#www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * 京东云VPC
 * VPC相关API
 *
 * OpenAPI spec version: v1
 * Contact: 
 *
 * NOTE: This class is auto generated by the jdcloud code generator program.
 */


using JDCloudSDK.Core.Auth;
using JDCloudSDK.Core.Client;
using JDCloudSDK.Core.Http;
using JDCloudSDK.Vpc.Apis;
using JDCloudSDK.Vpc.Model;
using System;
using System.Collections.Generic;
using System.Text;
#if NET40||NET35
#else
using System.Threading.Tasks;
#endif

namespace JDCloudSDK.Vpc.Client
{
    /// <summary>
    ///  京东云VPC
    ///  VPC相关API
    ///  Vpc Api 客户端
    ///</summary>
    public class VpcClient : JdcloudClient
    {

        /// <summary>
        ///  默认私有构造函数
        /// </summary>
        private VpcClient()
        {

        }

        /// <summary>
        /// 默认构造函数
        /// </summary>
        /// <param name="credentialsProvider">认证信息</param>
        /// <param name="httpRequestConfig">http 客户端配置信息</param>
        /// <param name="environment">sdk 环境配置信息</param>
        public VpcClient(CredentialsProvider credentialsProvider, HttpRequestConfig httpRequestConfig,SDKEnvironment environment)
        {
            this.httpRequestConfig = httpRequestConfig;
            this.credentialsProvider = credentialsProvider;
            this.environment = environment;
        }

        /// <summary>
        /// 默认构造函数
        /// </summary>
        /// <param name="httpRequestConfig">http 客户端配置信息</param>
        /// <param name="credentialsProvider">认证信息</param>
        public VpcClient(CredentialsProvider credentialsProvider,HttpRequestConfig httpRequestConfig)
        {
            this.httpRequestConfig = httpRequestConfig;
            this.credentialsProvider = credentialsProvider;
        }

        /// <summary>
        /// 默认构造函数，
        /// 注意如果使用此方法 httpRequestConfig 使用的http 请求 schema 为Https
        /// </summary>
        /// <param name="credentialsProvider">认证信息</param>
        public VpcClient(CredentialsProvider credentialsProvider)
        {
            this.credentialsProvider = credentialsProvider;
        }

        /// <summary>
        ///  版本号 1.2.8
        ///</summary>
        public const string ClientVersion = "1.2.8";

        private const string apiVersion = "v1";
        private const string userAgentPrefix = "JdcloudSdkDotNet";
        private const string defaultEndpoint = "vpc.jdcloud-api.com";
        private const string serviceName = "vpc";
        private const string userAgent = userAgentPrefix + "/" + ClientVersion + " " + serviceName + "/" + apiVersion;


        private SDKEnvironment environment = new SDKEnvironment(defaultEndpoint);
        private CredentialsProvider credentialsProvider;
        private HttpRequestConfig httpRequestConfig;

        /// <summary>
        ///  获取证书信息
        ///</summary>
        public override CredentialsProvider CredentialsProvider   { get { return credentialsProvider; } }

        /// <summary>
        ///  获取http 客户端配置信息
        ///</summary>
        public override HttpRequestConfig HttpRequestConfig { get { return httpRequestConfig; } }

        /// <summary>
        ///  获取sdk环境配置信息
        ///</summary>
        public override SDKEnvironment SDKEnvironment { get { return environment; } }

        /// <summary>
        ///  获取用户自定义浏览器识别字符串
        ///</summary>
        public override string UserAgent { get { return userAgent; } }

        /// <summary>
        ///  获取服务名称
        ///</summary>
        public override string ServiceName { get { return serviceName; } }

        /// <summary>
        ///  获取版本号
        ///</summary>
        public override string Version { get { return apiVersion; } }



#if NET40||NET35
        /// <summary>
        ///  删除弹性公网IP
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DeleteElasticIpResponse DeleteElasticIp(DeleteElasticIpRequest request) {
            return  new DeleteElasticIpExecutor().Client(this).Execute<DeleteElasticIpResponse, DeleteElasticIpResult, DeleteElasticIpRequest>(request);
        }
#else
        /// <summary>
        ///  删除弹性公网IP
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DeleteElasticIpResponse> DeleteElasticIp(DeleteElasticIpRequest request) {
            return await new DeleteElasticIpExecutor().Client(this).Execute<DeleteElasticIpResponse, DeleteElasticIpResult, DeleteElasticIpRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  修改VpcPeering接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ModifyVpcPeeringResponse ModifyVpcPeering(ModifyVpcPeeringRequest request) {
            return  new ModifyVpcPeeringExecutor().Client(this).Execute<ModifyVpcPeeringResponse, ModifyVpcPeeringResult, ModifyVpcPeeringRequest>(request);
        }
#else
        /// <summary>
        ///  修改VpcPeering接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ModifyVpcPeeringResponse> ModifyVpcPeering(ModifyVpcPeeringRequest request) {
            return await new ModifyVpcPeeringExecutor().Client(this).Execute<ModifyVpcPeeringResponse, ModifyVpcPeeringResult, ModifyVpcPeeringRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  修改弹性公网IP
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ModifyElasticIpResponse ModifyElasticIp(ModifyElasticIpRequest request) {
            return  new ModifyElasticIpExecutor().Client(this).Execute<ModifyElasticIpResponse, ModifyElasticIpResult, ModifyElasticIpRequest>(request);
        }
#else
        /// <summary>
        ///  修改弹性公网IP
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ModifyElasticIpResponse> ModifyElasticIp(ModifyElasticIpRequest request) {
            return await new ModifyElasticIpExecutor().Client(this).Execute<ModifyElasticIpResponse, ModifyElasticIpResult, ModifyElasticIpRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  修改networkAcl接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ModifyNetworkAclRulesResponse ModifyNetworkAclRules(ModifyNetworkAclRulesRequest request) {
            return  new ModifyNetworkAclRulesExecutor().Client(this).Execute<ModifyNetworkAclRulesResponse, ModifyNetworkAclRulesResult, ModifyNetworkAclRulesRequest>(request);
        }
#else
        /// <summary>
        ///  修改networkAcl接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ModifyNetworkAclRulesResponse> ModifyNetworkAclRules(ModifyNetworkAclRulesRequest request) {
            return await new ModifyNetworkAclRulesExecutor().Client(this).Execute<ModifyNetworkAclRulesResponse, ModifyNetworkAclRulesResult, ModifyNetworkAclRulesRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  删除networkAcl接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DeleteNetworkAclResponse DeleteNetworkAcl(DeleteNetworkAclRequest request) {
            return  new DeleteNetworkAclExecutor().Client(this).Execute<DeleteNetworkAclResponse, DeleteNetworkAclResult, DeleteNetworkAclRequest>(request);
        }
#else
        /// <summary>
        ///  删除networkAcl接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DeleteNetworkAclResponse> DeleteNetworkAcl(DeleteNetworkAclRequest request) {
            return await new DeleteNetworkAclExecutor().Client(this).Execute<DeleteNetworkAclResponse, DeleteNetworkAclResult, DeleteNetworkAclRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  删除子网
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DeleteSubnetResponse DeleteSubnet(DeleteSubnetRequest request) {
            return  new DeleteSubnetExecutor().Client(this).Execute<DeleteSubnetResponse, DeleteSubnetResult, DeleteSubnetRequest>(request);
        }
#else
        /// <summary>
        ///  删除子网
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DeleteSubnetResponse> DeleteSubnet(DeleteSubnetRequest request) {
            return await new DeleteSubnetExecutor().Client(this).Execute<DeleteSubnetResponse, DeleteSubnetResult, DeleteSubnetRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查询子网列表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeSubnetsResponse DescribeSubnets(DescribeSubnetsRequest request) {
            return  new DescribeSubnetsExecutor().Client(this).Execute<DescribeSubnetsResponse, DescribeSubnetsResult, DescribeSubnetsRequest>(request);
        }
#else
        /// <summary>
        ///  查询子网列表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeSubnetsResponse> DescribeSubnets(DescribeSubnetsRequest request) {
            return await new DescribeSubnetsExecutor().Client(this).Execute<DescribeSubnetsResponse, DescribeSubnetsResult, DescribeSubnetsRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查询弹性网卡列表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeNetworkInterfacesResponse DescribeNetworkInterfaces(DescribeNetworkInterfacesRequest request) {
            return  new DescribeNetworkInterfacesExecutor().Client(this).Execute<DescribeNetworkInterfacesResponse, DescribeNetworkInterfacesResult, DescribeNetworkInterfacesRequest>(request);
        }
#else
        /// <summary>
        ///  查询弹性网卡列表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeNetworkInterfacesResponse> DescribeNetworkInterfaces(DescribeNetworkInterfacesRequest request) {
            return await new DescribeNetworkInterfacesExecutor().Client(this).Execute<DescribeNetworkInterfacesResponse, DescribeNetworkInterfacesResult, DescribeNetworkInterfacesRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  移除安全组规则
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public RemoveNetworkSecurityGroupRulesResponse RemoveNetworkSecurityGroupRules(RemoveNetworkSecurityGroupRulesRequest request) {
            return  new RemoveNetworkSecurityGroupRulesExecutor().Client(this).Execute<RemoveNetworkSecurityGroupRulesResponse, RemoveNetworkSecurityGroupRulesResult, RemoveNetworkSecurityGroupRulesRequest>(request);
        }
#else
        /// <summary>
        ///  移除安全组规则
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<RemoveNetworkSecurityGroupRulesResponse> RemoveNetworkSecurityGroupRules(RemoveNetworkSecurityGroupRulesRequest request) {
            return await new RemoveNetworkSecurityGroupRulesExecutor().Client(this).Execute<RemoveNetworkSecurityGroupRulesResponse, RemoveNetworkSecurityGroupRulesResult, RemoveNetworkSecurityGroupRulesRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  修改安全组属性
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ModifyNetworkSecurityGroupResponse ModifyNetworkSecurityGroup(ModifyNetworkSecurityGroupRequest request) {
            return  new ModifyNetworkSecurityGroupExecutor().Client(this).Execute<ModifyNetworkSecurityGroupResponse, ModifyNetworkSecurityGroupResult, ModifyNetworkSecurityGroupRequest>(request);
        }
#else
        /// <summary>
        ///  修改安全组属性
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ModifyNetworkSecurityGroupResponse> ModifyNetworkSecurityGroup(ModifyNetworkSecurityGroupRequest request) {
            return await new ModifyNetworkSecurityGroupExecutor().Client(this).Execute<ModifyNetworkSecurityGroupResponse, ModifyNetworkSecurityGroupResult, ModifyNetworkSecurityGroupRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  添加安全组规则
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public AddNetworkSecurityGroupRulesResponse AddNetworkSecurityGroupRules(AddNetworkSecurityGroupRulesRequest request) {
            return  new AddNetworkSecurityGroupRulesExecutor().Client(this).Execute<AddNetworkSecurityGroupRulesResponse, AddNetworkSecurityGroupRulesResult, AddNetworkSecurityGroupRulesRequest>(request);
        }
#else
        /// <summary>
        ///  添加安全组规则
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<AddNetworkSecurityGroupRulesResponse> AddNetworkSecurityGroupRules(AddNetworkSecurityGroupRulesRequest request) {
            return await new AddNetworkSecurityGroupRulesExecutor().Client(this).Execute<AddNetworkSecurityGroupRulesResponse, AddNetworkSecurityGroupRulesResult, AddNetworkSecurityGroupRulesRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  创建networkAcl接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public CreateNetworkAclResponse CreateNetworkAcl(CreateNetworkAclRequest request) {
            return  new CreateNetworkAclExecutor().Client(this).Execute<CreateNetworkAclResponse, CreateNetworkAclResult, CreateNetworkAclRequest>(request);
        }
#else
        /// <summary>
        ///  创建networkAcl接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<CreateNetworkAclResponse> CreateNetworkAcl(CreateNetworkAclRequest request) {
            return await new CreateNetworkAclExecutor().Client(this).Execute<CreateNetworkAclResponse, CreateNetworkAclResult, CreateNetworkAclRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查询配额信息
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeQuotaResponse DescribeQuota(DescribeQuotaRequest request) {
            return  new DescribeQuotaExecutor().Client(this).Execute<DescribeQuotaResponse, DescribeQuotaResult, DescribeQuotaRequest>(request);
        }
#else
        /// <summary>
        ///  查询配额信息
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeQuotaResponse> DescribeQuota(DescribeQuotaRequest request) {
            return await new DescribeQuotaExecutor().Client(this).Execute<DescribeQuotaResponse, DescribeQuotaResult, DescribeQuotaRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  创建路由表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public CreateRouteTableResponse CreateRouteTable(CreateRouteTableRequest request) {
            return  new CreateRouteTableExecutor().Client(this).Execute<CreateRouteTableResponse, CreateRouteTableResult, CreateRouteTableRequest>(request);
        }
#else
        /// <summary>
        ///  创建路由表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<CreateRouteTableResponse> CreateRouteTable(CreateRouteTableRequest request) {
            return await new CreateRouteTableExecutor().Client(this).Execute<CreateRouteTableResponse, CreateRouteTableResult, CreateRouteTableRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  删除安全组
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DeleteNetworkSecurityGroupResponse DeleteNetworkSecurityGroup(DeleteNetworkSecurityGroupRequest request) {
            return  new DeleteNetworkSecurityGroupExecutor().Client(this).Execute<DeleteNetworkSecurityGroupResponse, DeleteNetworkSecurityGroupResult, DeleteNetworkSecurityGroupRequest>(request);
        }
#else
        /// <summary>
        ///  删除安全组
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DeleteNetworkSecurityGroupResponse> DeleteNetworkSecurityGroup(DeleteNetworkSecurityGroupRequest request) {
            return await new DeleteNetworkSecurityGroupExecutor().Client(this).Execute<DeleteNetworkSecurityGroupResponse, DeleteNetworkSecurityGroupResult, DeleteNetworkSecurityGroupRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查询路由表信息详情
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeRouteTableResponse DescribeRouteTable(DescribeRouteTableRequest request) {
            return  new DescribeRouteTableExecutor().Client(this).Execute<DescribeRouteTableResponse, DescribeRouteTableResult, DescribeRouteTableRequest>(request);
        }
#else
        /// <summary>
        ///  查询路由表信息详情
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeRouteTableResponse> DescribeRouteTable(DescribeRouteTableRequest request) {
            return await new DescribeRouteTableExecutor().Client(this).Execute<DescribeRouteTableResponse, DescribeRouteTableResult, DescribeRouteTableRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  删除私有网络
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DeleteVpcResponse DeleteVpc(DeleteVpcRequest request) {
            return  new DeleteVpcExecutor().Client(this).Execute<DeleteVpcResponse, DeleteVpcResult, DeleteVpcRequest>(request);
        }
#else
        /// <summary>
        ///  删除私有网络
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DeleteVpcResponse> DeleteVpc(DeleteVpcRequest request) {
            return await new DeleteVpcExecutor().Client(this).Execute<DeleteVpcResponse, DeleteVpcResult, DeleteVpcRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查询VpcPeering资源列表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeVpcPeeringsResponse DescribeVpcPeerings(DescribeVpcPeeringsRequest request) {
            return  new DescribeVpcPeeringsExecutor().Client(this).Execute<DescribeVpcPeeringsResponse, DescribeVpcPeeringsResult, DescribeVpcPeeringsRequest>(request);
        }
#else
        /// <summary>
        ///  查询VpcPeering资源列表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeVpcPeeringsResponse> DescribeVpcPeerings(DescribeVpcPeeringsRequest request) {
            return await new DescribeVpcPeeringsExecutor().Client(this).Execute<DescribeVpcPeeringsResponse, DescribeVpcPeeringsResult, DescribeVpcPeeringsRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查询Acl列表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeNetworkAclsResponse DescribeNetworkAcls(DescribeNetworkAclsRequest request) {
            return  new DescribeNetworkAclsExecutor().Client(this).Execute<DescribeNetworkAclsResponse, DescribeNetworkAclsResult, DescribeNetworkAclsRequest>(request);
        }
#else
        /// <summary>
        ///  查询Acl列表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeNetworkAclsResponse> DescribeNetworkAcls(DescribeNetworkAclsRequest request) {
            return await new DescribeNetworkAclsExecutor().Client(this).Execute<DescribeNetworkAclsResponse, DescribeNetworkAclsResult, DescribeNetworkAclsRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查询子网信息详情
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeSubnetResponse DescribeSubnet(DescribeSubnetRequest request) {
            return  new DescribeSubnetExecutor().Client(this).Execute<DescribeSubnetResponse, DescribeSubnetResult, DescribeSubnetRequest>(request);
        }
#else
        /// <summary>
        ///  查询子网信息详情
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeSubnetResponse> DescribeSubnet(DescribeSubnetRequest request) {
            return await new DescribeSubnetExecutor().Client(this).Execute<DescribeSubnetResponse, DescribeSubnetResult, DescribeSubnetRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查询安全组信息详情
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeNetworkSecurityGroupResponse DescribeNetworkSecurityGroup(DescribeNetworkSecurityGroupRequest request) {
            return  new DescribeNetworkSecurityGroupExecutor().Client(this).Execute<DescribeNetworkSecurityGroupResponse, DescribeNetworkSecurityGroupResult, DescribeNetworkSecurityGroupRequest>(request);
        }
#else
        /// <summary>
        ///  查询安全组信息详情
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeNetworkSecurityGroupResponse> DescribeNetworkSecurityGroup(DescribeNetworkSecurityGroupRequest request) {
            return await new DescribeNetworkSecurityGroupExecutor().Client(this).Execute<DescribeNetworkSecurityGroupResponse, DescribeNetworkSecurityGroupResult, DescribeNetworkSecurityGroupRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查询安全组列表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeNetworkSecurityGroupsResponse DescribeNetworkSecurityGroups(DescribeNetworkSecurityGroupsRequest request) {
            return  new DescribeNetworkSecurityGroupsExecutor().Client(this).Execute<DescribeNetworkSecurityGroupsResponse, DescribeNetworkSecurityGroupsResult, DescribeNetworkSecurityGroupsRequest>(request);
        }
#else
        /// <summary>
        ///  查询安全组列表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeNetworkSecurityGroupsResponse> DescribeNetworkSecurityGroups(DescribeNetworkSecurityGroupsRequest request) {
            return await new DescribeNetworkSecurityGroupsExecutor().Client(this).Execute<DescribeNetworkSecurityGroupsResponse, DescribeNetworkSecurityGroupsResult, DescribeNetworkSecurityGroupsRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查询Vpc信息详情
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeVpcResponse DescribeVpc(DescribeVpcRequest request) {
            return  new DescribeVpcExecutor().Client(this).Execute<DescribeVpcResponse, DescribeVpcResult, DescribeVpcRequest>(request);
        }
#else
        /// <summary>
        ///  查询Vpc信息详情
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeVpcResponse> DescribeVpc(DescribeVpcRequest request) {
            return await new DescribeVpcExecutor().Client(this).Execute<DescribeVpcResponse, DescribeVpcResult, DescribeVpcRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  给子网解绑NetworkAcl接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DisassociateNetworkAclResponse DisassociateNetworkAcl(DisassociateNetworkAclRequest request) {
            return  new DisassociateNetworkAclExecutor().Client(this).Execute<DisassociateNetworkAclResponse, DisassociateNetworkAclResult, DisassociateNetworkAclRequest>(request);
        }
#else
        /// <summary>
        ///  给子网解绑NetworkAcl接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DisassociateNetworkAclResponse> DisassociateNetworkAcl(DisassociateNetworkAclRequest request) {
            return await new DisassociateNetworkAclExecutor().Client(this).Execute<DisassociateNetworkAclResponse, DisassociateNetworkAclResult, DisassociateNetworkAclRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查询边缘公网IP可用线路列表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeEdgeIpProvidersResponse DescribeEdgeIpProviders(DescribeEdgeIpProvidersRequest request) {
            return  new DescribeEdgeIpProvidersExecutor().Client(this).Execute<DescribeEdgeIpProvidersResponse, DescribeEdgeIpProvidersResult, DescribeEdgeIpProvidersRequest>(request);
        }
#else
        /// <summary>
        ///  查询边缘公网IP可用线路列表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeEdgeIpProvidersResponse> DescribeEdgeIpProviders(DescribeEdgeIpProvidersRequest request) {
            return await new DescribeEdgeIpProvidersExecutor().Client(this).Execute<DescribeEdgeIpProvidersResponse, DescribeEdgeIpProvidersResult, DescribeEdgeIpProvidersRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  移除networkAcl规则
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public RemoveNetworkAclRulesResponse RemoveNetworkAclRules(RemoveNetworkAclRulesRequest request) {
            return  new RemoveNetworkAclRulesExecutor().Client(this).Execute<RemoveNetworkAclRulesResponse, RemoveNetworkAclRulesResult, RemoveNetworkAclRulesRequest>(request);
        }
#else
        /// <summary>
        ///  移除networkAcl规则
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<RemoveNetworkAclRulesResponse> RemoveNetworkAclRules(RemoveNetworkAclRulesRequest request) {
            return await new RemoveNetworkAclRulesExecutor().Client(this).Execute<RemoveNetworkAclRulesResponse, RemoveNetworkAclRulesResult, RemoveNetworkAclRulesRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  路由表绑定子网接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public AssociateRouteTableResponse AssociateRouteTable(AssociateRouteTableRequest request) {
            return  new AssociateRouteTableExecutor().Client(this).Execute<AssociateRouteTableResponse, AssociateRouteTableResult, AssociateRouteTableRequest>(request);
        }
#else
        /// <summary>
        ///  路由表绑定子网接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<AssociateRouteTableResponse> AssociateRouteTable(AssociateRouteTableRequest request) {
            return await new AssociateRouteTableExecutor().Client(this).Execute<AssociateRouteTableResponse, AssociateRouteTableResult, AssociateRouteTableRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查询私有网络列表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeVpcsResponse DescribeVpcs(DescribeVpcsRequest request) {
            return  new DescribeVpcsExecutor().Client(this).Execute<DescribeVpcsResponse, DescribeVpcsResult, DescribeVpcsRequest>(request);
        }
#else
        /// <summary>
        ///  查询私有网络列表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeVpcsResponse> DescribeVpcs(DescribeVpcsRequest request) {
            return await new DescribeVpcsExecutor().Client(this).Execute<DescribeVpcsResponse, DescribeVpcsResult, DescribeVpcsRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  创建安全组
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public CreateNetworkSecurityGroupResponse CreateNetworkSecurityGroup(CreateNetworkSecurityGroupRequest request) {
            return  new CreateNetworkSecurityGroupExecutor().Client(this).Execute<CreateNetworkSecurityGroupResponse, CreateNetworkSecurityGroupResult, CreateNetworkSecurityGroupRequest>(request);
        }
#else
        /// <summary>
        ///  创建安全组
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<CreateNetworkSecurityGroupResponse> CreateNetworkSecurityGroup(CreateNetworkSecurityGroupRequest request) {
            return await new CreateNetworkSecurityGroupExecutor().Client(this).Execute<CreateNetworkSecurityGroupResponse, CreateNetworkSecurityGroupResult, CreateNetworkSecurityGroupRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  创建子网
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public CreateSubnetResponse CreateSubnet(CreateSubnetRequest request) {
            return  new CreateSubnetExecutor().Client(this).Execute<CreateSubnetResponse, CreateSubnetResult, CreateSubnetRequest>(request);
        }
#else
        /// <summary>
        ///  创建子网
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<CreateSubnetResponse> CreateSubnet(CreateSubnetRequest request) {
            return await new CreateSubnetExecutor().Client(this).Execute<CreateSubnetResponse, CreateSubnetResult, CreateSubnetRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  删除路由表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DeleteRouteTableResponse DeleteRouteTable(DeleteRouteTableRequest request) {
            return  new DeleteRouteTableExecutor().Client(this).Execute<DeleteRouteTableResponse, DeleteRouteTableResult, DeleteRouteTableRequest>(request);
        }
#else
        /// <summary>
        ///  删除路由表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DeleteRouteTableResponse> DeleteRouteTable(DeleteRouteTableRequest request) {
            return await new DeleteRouteTableExecutor().Client(this).Execute<DeleteRouteTableResponse, DeleteRouteTableResult, DeleteRouteTableRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查询VpcPeering资源详情
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeVpcPeeringResponse DescribeVpcPeering(DescribeVpcPeeringRequest request) {
            return  new DescribeVpcPeeringExecutor().Client(this).Execute<DescribeVpcPeeringResponse, DescribeVpcPeeringResult, DescribeVpcPeeringRequest>(request);
        }
#else
        /// <summary>
        ///  查询VpcPeering资源详情
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeVpcPeeringResponse> DescribeVpcPeering(DescribeVpcPeeringRequest request) {
            return await new DescribeVpcPeeringExecutor().Client(this).Execute<DescribeVpcPeeringResponse, DescribeVpcPeeringResult, DescribeVpcPeeringRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  移除路由表规则
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public RemoveRouteTableRulesResponse RemoveRouteTableRules(RemoveRouteTableRulesRequest request) {
            return  new RemoveRouteTableRulesExecutor().Client(this).Execute<RemoveRouteTableRulesResponse, RemoveRouteTableRulesResult, RemoveRouteTableRulesRequest>(request);
        }
#else
        /// <summary>
        ///  移除路由表规则
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<RemoveRouteTableRulesResponse> RemoveRouteTableRules(RemoveRouteTableRulesRequest request) {
            return await new RemoveRouteTableRulesExecutor().Client(this).Execute<RemoveRouteTableRulesResponse, RemoveRouteTableRulesResult, RemoveRouteTableRulesRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  创建VpcPeering接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public CreateVpcPeeringResponse CreateVpcPeering(CreateVpcPeeringRequest request) {
            return  new CreateVpcPeeringExecutor().Client(this).Execute<CreateVpcPeeringResponse, CreateVpcPeeringResult, CreateVpcPeeringRequest>(request);
        }
#else
        /// <summary>
        ///  创建VpcPeering接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<CreateVpcPeeringResponse> CreateVpcPeering(CreateVpcPeeringRequest request) {
            return await new CreateVpcPeeringExecutor().Client(this).Execute<CreateVpcPeeringResponse, CreateVpcPeeringResult, CreateVpcPeeringRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  给网卡分配secondaryIp接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public AssignSecondaryIpsResponse AssignSecondaryIps(AssignSecondaryIpsRequest request) {
            return  new AssignSecondaryIpsExecutor().Client(this).Execute<AssignSecondaryIpsResponse, AssignSecondaryIpsResult, AssignSecondaryIpsRequest>(request);
        }
#else
        /// <summary>
        ///  给网卡分配secondaryIp接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<AssignSecondaryIpsResponse> AssignSecondaryIps(AssignSecondaryIpsRequest request) {
            return await new AssignSecondaryIpsExecutor().Client(this).Execute<AssignSecondaryIpsResponse, AssignSecondaryIpsResult, AssignSecondaryIpsRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查询路由表列表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeRouteTablesResponse DescribeRouteTables(DescribeRouteTablesRequest request) {
            return  new DescribeRouteTablesExecutor().Client(this).Execute<DescribeRouteTablesResponse, DescribeRouteTablesResult, DescribeRouteTablesRequest>(request);
        }
#else
        /// <summary>
        ///  查询路由表列表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeRouteTablesResponse> DescribeRouteTables(DescribeRouteTablesRequest request) {
            return await new DescribeRouteTablesExecutor().Client(this).Execute<DescribeRouteTablesResponse, DescribeRouteTablesResult, DescribeRouteTablesRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  修改弹性网卡接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ModifyNetworkInterfaceResponse ModifyNetworkInterface(ModifyNetworkInterfaceRequest request) {
            return  new ModifyNetworkInterfaceExecutor().Client(this).Execute<ModifyNetworkInterfaceResponse, ModifyNetworkInterfaceResult, ModifyNetworkInterfaceRequest>(request);
        }
#else
        /// <summary>
        ///  修改弹性网卡接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ModifyNetworkInterfaceResponse> ModifyNetworkInterface(ModifyNetworkInterfaceRequest request) {
            return await new ModifyNetworkInterfaceExecutor().Client(this).Execute<ModifyNetworkInterfaceResponse, ModifyNetworkInterfaceResult, ModifyNetworkInterfaceRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查询弹性公网IP列表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeElasticIpsResponse DescribeElasticIps(DescribeElasticIpsRequest request) {
            return  new DescribeElasticIpsExecutor().Client(this).Execute<DescribeElasticIpsResponse, DescribeElasticIpsResult, DescribeElasticIpsRequest>(request);
        }
#else
        /// <summary>
        ///  查询弹性公网IP列表
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeElasticIpsResponse> DescribeElasticIps(DescribeElasticIpsRequest request) {
            return await new DescribeElasticIpsExecutor().Client(this).Execute<DescribeElasticIpsResponse, DescribeElasticIpsResult, DescribeElasticIpsRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  修改安全组规则
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ModifyNetworkSecurityGroupRulesResponse ModifyNetworkSecurityGroupRules(ModifyNetworkSecurityGroupRulesRequest request) {
            return  new ModifyNetworkSecurityGroupRulesExecutor().Client(this).Execute<ModifyNetworkSecurityGroupRulesResponse, ModifyNetworkSecurityGroupRulesResult, ModifyNetworkSecurityGroupRulesRequest>(request);
        }
#else
        /// <summary>
        ///  修改安全组规则
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ModifyNetworkSecurityGroupRulesResponse> ModifyNetworkSecurityGroupRules(ModifyNetworkSecurityGroupRulesRequest request) {
            return await new ModifyNetworkSecurityGroupRulesExecutor().Client(this).Execute<ModifyNetworkSecurityGroupRulesResponse, ModifyNetworkSecurityGroupRulesResult, ModifyNetworkSecurityGroupRulesRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  修改networkAcl接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ModifyNetworkAclResponse ModifyNetworkAcl(ModifyNetworkAclRequest request) {
            return  new ModifyNetworkAclExecutor().Client(this).Execute<ModifyNetworkAclResponse, ModifyNetworkAclResult, ModifyNetworkAclRequest>(request);
        }
#else
        /// <summary>
        ///  修改networkAcl接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ModifyNetworkAclResponse> ModifyNetworkAcl(ModifyNetworkAclRequest request) {
            return await new ModifyNetworkAclExecutor().Client(this).Execute<ModifyNetworkAclResponse, ModifyNetworkAclResult, ModifyNetworkAclRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查询弹性网卡信息详情
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeNetworkInterfaceResponse DescribeNetworkInterface(DescribeNetworkInterfaceRequest request) {
            return  new DescribeNetworkInterfaceExecutor().Client(this).Execute<DescribeNetworkInterfaceResponse, DescribeNetworkInterfaceResult, DescribeNetworkInterfaceRequest>(request);
        }
#else
        /// <summary>
        ///  查询弹性网卡信息详情
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeNetworkInterfaceResponse> DescribeNetworkInterface(DescribeNetworkInterfaceRequest request) {
            return await new DescribeNetworkInterfaceExecutor().Client(this).Execute<DescribeNetworkInterfaceResponse, DescribeNetworkInterfaceResult, DescribeNetworkInterfaceRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  给网卡解绑弹性Ip接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DisassociateElasticIpResponse DisassociateElasticIp(DisassociateElasticIpRequest request) {
            return  new DisassociateElasticIpExecutor().Client(this).Execute<DisassociateElasticIpResponse, DisassociateElasticIpResult, DisassociateElasticIpRequest>(request);
        }
#else
        /// <summary>
        ///  给网卡解绑弹性Ip接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DisassociateElasticIpResponse> DisassociateElasticIp(DisassociateElasticIpRequest request) {
            return await new DisassociateElasticIpExecutor().Client(this).Execute<DisassociateElasticIpResponse, DisassociateElasticIpResult, DisassociateElasticIpRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  删除VpcPeering接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DeleteVpcPeeringResponse DeleteVpcPeering(DeleteVpcPeeringRequest request) {
            return  new DeleteVpcPeeringExecutor().Client(this).Execute<DeleteVpcPeeringResponse, DeleteVpcPeeringResult, DeleteVpcPeeringRequest>(request);
        }
#else
        /// <summary>
        ///  删除VpcPeering接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DeleteVpcPeeringResponse> DeleteVpcPeering(DeleteVpcPeeringRequest request) {
            return await new DeleteVpcPeeringExecutor().Client(this).Execute<DeleteVpcPeeringResponse, DeleteVpcPeeringResult, DeleteVpcPeeringRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  创建网卡接口，只能创建辅助网卡
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public CreateNetworkInterfaceResponse CreateNetworkInterface(CreateNetworkInterfaceRequest request) {
            return  new CreateNetworkInterfaceExecutor().Client(this).Execute<CreateNetworkInterfaceResponse, CreateNetworkInterfaceResult, CreateNetworkInterfaceRequest>(request);
        }
#else
        /// <summary>
        ///  创建网卡接口，只能创建辅助网卡
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<CreateNetworkInterfaceResponse> CreateNetworkInterface(CreateNetworkInterfaceRequest request) {
            return await new CreateNetworkInterfaceExecutor().Client(this).Execute<CreateNetworkInterfaceResponse, CreateNetworkInterfaceResult, CreateNetworkInterfaceRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  创建私有网络
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public CreateVpcResponse CreateVpc(CreateVpcRequest request) {
            return  new CreateVpcExecutor().Client(this).Execute<CreateVpcResponse, CreateVpcResult, CreateVpcRequest>(request);
        }
#else
        /// <summary>
        ///  创建私有网络
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<CreateVpcResponse> CreateVpc(CreateVpcRequest request) {
            return await new CreateVpcExecutor().Client(this).Execute<CreateVpcResponse, CreateVpcResult, CreateVpcRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  修改路由表规则
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ModifyRouteTableRulesResponse ModifyRouteTableRules(ModifyRouteTableRulesRequest request) {
            return  new ModifyRouteTableRulesExecutor().Client(this).Execute<ModifyRouteTableRulesResponse, ModifyRouteTableRulesResult, ModifyRouteTableRulesRequest>(request);
        }
#else
        /// <summary>
        ///  修改路由表规则
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ModifyRouteTableRulesResponse> ModifyRouteTableRules(ModifyRouteTableRulesRequest request) {
            return await new ModifyRouteTableRulesExecutor().Client(this).Execute<ModifyRouteTableRulesResponse, ModifyRouteTableRulesResult, ModifyRouteTableRulesRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  添加路由表规则
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public AddRouteTableRulesResponse AddRouteTableRules(AddRouteTableRulesRequest request) {
            return  new AddRouteTableRulesExecutor().Client(this).Execute<AddRouteTableRulesResponse, AddRouteTableRulesResult, AddRouteTableRulesRequest>(request);
        }
#else
        /// <summary>
        ///  添加路由表规则
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<AddRouteTableRulesResponse> AddRouteTableRules(AddRouteTableRulesRequest request) {
            return await new AddRouteTableRulesExecutor().Client(this).Execute<AddRouteTableRulesResponse, AddRouteTableRulesResult, AddRouteTableRulesRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  ElasticIp资源信息详情
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeElasticIpResponse DescribeElasticIp(DescribeElasticIpRequest request) {
            return  new DescribeElasticIpExecutor().Client(this).Execute<DescribeElasticIpResponse, DescribeElasticIpResult, DescribeElasticIpRequest>(request);
        }
#else
        /// <summary>
        ///  ElasticIp资源信息详情
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeElasticIpResponse> DescribeElasticIp(DescribeElasticIpRequest request) {
            return await new DescribeElasticIpExecutor().Client(this).Execute<DescribeElasticIpResponse, DescribeElasticIpResult, DescribeElasticIpRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  给网卡删除secondaryIp接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public UnassignSecondaryIpsResponse UnassignSecondaryIps(UnassignSecondaryIpsRequest request) {
            return  new UnassignSecondaryIpsExecutor().Client(this).Execute<UnassignSecondaryIpsResponse, UnassignSecondaryIpsResult, UnassignSecondaryIpsRequest>(request);
        }
#else
        /// <summary>
        ///  给网卡删除secondaryIp接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<UnassignSecondaryIpsResponse> UnassignSecondaryIps(UnassignSecondaryIpsRequest request) {
            return await new UnassignSecondaryIpsExecutor().Client(this).Execute<UnassignSecondaryIpsResponse, UnassignSecondaryIpsResult, UnassignSecondaryIpsRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  修改路由表属性
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ModifyRouteTableResponse ModifyRouteTable(ModifyRouteTableRequest request) {
            return  new ModifyRouteTableExecutor().Client(this).Execute<ModifyRouteTableResponse, ModifyRouteTableResult, ModifyRouteTableRequest>(request);
        }
#else
        /// <summary>
        ///  修改路由表属性
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ModifyRouteTableResponse> ModifyRouteTable(ModifyRouteTableRequest request) {
            return await new ModifyRouteTableExecutor().Client(this).Execute<ModifyRouteTableResponse, ModifyRouteTableResult, ModifyRouteTableRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  给网卡绑定弹性Ip接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public AssociateElasticIpResponse AssociateElasticIp(AssociateElasticIpRequest request) {
            return  new AssociateElasticIpExecutor().Client(this).Execute<AssociateElasticIpResponse, AssociateElasticIpResult, AssociateElasticIpRequest>(request);
        }
#else
        /// <summary>
        ///  给网卡绑定弹性Ip接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<AssociateElasticIpResponse> AssociateElasticIp(AssociateElasticIpRequest request) {
            return await new AssociateElasticIpExecutor().Client(this).Execute<AssociateElasticIpResponse, AssociateElasticIpResult, AssociateElasticIpRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  给路由表解绑子网接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DisassociateRouteTableResponse DisassociateRouteTable(DisassociateRouteTableRequest request) {
            return  new DisassociateRouteTableExecutor().Client(this).Execute<DisassociateRouteTableResponse, DisassociateRouteTableResult, DisassociateRouteTableRequest>(request);
        }
#else
        /// <summary>
        ///  给路由表解绑子网接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DisassociateRouteTableResponse> DisassociateRouteTable(DisassociateRouteTableRequest request) {
            return await new DisassociateRouteTableExecutor().Client(this).Execute<DisassociateRouteTableResponse, DisassociateRouteTableResult, DisassociateRouteTableRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  修改私有网络接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ModifyVpcResponse ModifyVpc(ModifyVpcRequest request) {
            return  new ModifyVpcExecutor().Client(this).Execute<ModifyVpcResponse, ModifyVpcResult, ModifyVpcRequest>(request);
        }
#else
        /// <summary>
        ///  修改私有网络接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ModifyVpcResponse> ModifyVpc(ModifyVpcRequest request) {
            return await new ModifyVpcExecutor().Client(this).Execute<ModifyVpcResponse, ModifyVpcResult, ModifyVpcRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  给子网绑定networkAcl接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public AssociateNetworkAclResponse AssociateNetworkAcl(AssociateNetworkAclRequest request) {
            return  new AssociateNetworkAclExecutor().Client(this).Execute<AssociateNetworkAclResponse, AssociateNetworkAclResult, AssociateNetworkAclRequest>(request);
        }
#else
        /// <summary>
        ///  给子网绑定networkAcl接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<AssociateNetworkAclResponse> AssociateNetworkAcl(AssociateNetworkAclRequest request) {
            return await new AssociateNetworkAclExecutor().Client(this).Execute<AssociateNetworkAclResponse, AssociateNetworkAclResult, AssociateNetworkAclRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  修改子网接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public ModifySubnetResponse ModifySubnet(ModifySubnetRequest request) {
            return  new ModifySubnetExecutor().Client(this).Execute<ModifySubnetResponse, ModifySubnetResult, ModifySubnetRequest>(request);
        }
#else
        /// <summary>
        ///  修改子网接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<ModifySubnetResponse> ModifySubnet(ModifySubnetRequest request) {
            return await new ModifySubnetExecutor().Client(this).Execute<ModifySubnetResponse, ModifySubnetResult, ModifySubnetRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  创建一个或者多个弹性公网IP
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public CreateElasticIpsResponse CreateElasticIps(CreateElasticIpsRequest request) {
            return  new CreateElasticIpsExecutor().Client(this).Execute<CreateElasticIpsResponse, CreateElasticIpsResult, CreateElasticIpsRequest>(request);
        }
#else
        /// <summary>
        ///  创建一个或者多个弹性公网IP
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<CreateElasticIpsResponse> CreateElasticIps(CreateElasticIpsRequest request) {
            return await new CreateElasticIpsExecutor().Client(this).Execute<CreateElasticIpsResponse, CreateElasticIpsResult, CreateElasticIpsRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  删除弹性网卡接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DeleteNetworkInterfaceResponse DeleteNetworkInterface(DeleteNetworkInterfaceRequest request) {
            return  new DeleteNetworkInterfaceExecutor().Client(this).Execute<DeleteNetworkInterfaceResponse, DeleteNetworkInterfaceResult, DeleteNetworkInterfaceRequest>(request);
        }
#else
        /// <summary>
        ///  删除弹性网卡接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DeleteNetworkInterfaceResponse> DeleteNetworkInterface(DeleteNetworkInterfaceRequest request) {
            return await new DeleteNetworkInterfaceExecutor().Client(this).Execute<DeleteNetworkInterfaceResponse, DeleteNetworkInterfaceResult, DeleteNetworkInterfaceRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  查询networkAcl资源详情
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public DescribeNetworkAclResponse DescribeNetworkAcl(DescribeNetworkAclRequest request) {
            return  new DescribeNetworkAclExecutor().Client(this).Execute<DescribeNetworkAclResponse, DescribeNetworkAclResult, DescribeNetworkAclRequest>(request);
        }
#else
        /// <summary>
        ///  查询networkAcl资源详情
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<DescribeNetworkAclResponse> DescribeNetworkAcl(DescribeNetworkAclRequest request) {
            return await new DescribeNetworkAclExecutor().Client(this).Execute<DescribeNetworkAclResponse, DescribeNetworkAclResult, DescribeNetworkAclRequest>(request).ConfigureAwait(false);
        }
#endif
#if NET40||NET35
        /// <summary>
        ///  添加networkAcl规则接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public AddNetworkAclRulesResponse AddNetworkAclRules(AddNetworkAclRulesRequest request) {
            return  new AddNetworkAclRulesExecutor().Client(this).Execute<AddNetworkAclRulesResponse, AddNetworkAclRulesResult, AddNetworkAclRulesRequest>(request);
        }
#else
        /// <summary>
        ///  添加networkAcl规则接口
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求结果信息</returns>
        public async Task<AddNetworkAclRulesResponse> AddNetworkAclRules(AddNetworkAclRulesRequest request) {
            return await new AddNetworkAclRulesExecutor().Client(this).Execute<AddNetworkAclRulesResponse, AddNetworkAclRulesResult, AddNetworkAclRulesRequest>(request).ConfigureAwait(false);
        }
#endif

            /// <summary>
            ///  默认VpcClient 构造器 接口
            ///</summary>
            public interface Builder
            {

                /// <summary>
                /// 设置认证信息参数
                /// </summary>
                /// <param name="provider">认证信息提供对象</param>
                /// <returns>vpcClient 构造器</returns>
                Builder CredentialsProvider(CredentialsProvider provider);

                /// <summary>
                /// 设置请求环境参数
                /// </summary>
                /// <param name="environment">环境参数信息</param>
                /// <returns>vpcClient 构造器</returns>
                Builder Environment(Core.Client.SDKEnvironment environment);

                /// <summary>
                /// http 请求配置信息
                /// </summary>
                /// <param name="config">http 请求配置信息</param>
                /// <returns>vpcClient 构造器</returns>
                Builder HttpRequestConfig(HttpRequestConfig config);

                /// <summary>
                ///  构造VpcClient 对象
                ///</summary>
                VpcClient Build();
            }

            /// <summary>
            ///  默认VpcClient 构造器
            ///</summary>
            public class DefaultBuilder : Builder
            {
                /// <summary>
                ///  VpcClient service client
                /// </summary>
                private  VpcClient vpcClient;

                /// <summary>
                ///  默认VpcClient 构造器构造对象
                ///</summary>
                public DefaultBuilder()
                {
                    vpcClient = new VpcClient();
                }

                /// <summary>
                ///  构造VpcClient 对象
                ///</summary>
                public VpcClient Build()
                {
                    if (vpcClient.CredentialsProvider == null)
                    {
                        //if credentialsProvider not set, try load jdcloud global default  credentials provider
                        vpcClient.credentialsProvider = JdCloud.DefaultInstance.GetCredentialsProvider();
                        if (vpcClient.credentialsProvider == null)
                        {
                            throw new ArgumentNullException("VpcClient build error: jdcloud credentials provider not set");
                        }
                    }
                    if (vpcClient.HttpRequestConfig == null)
                    {
                        vpcClient.httpRequestConfig = JdCloud.DefaultInstance.GetHttpRequestConfig();
                        if (vpcClient.httpRequestConfig == null)
                        {
                        throw new ArgumentNullException("VpcClient build error: http request config not set");
                        }
                    }
                    return vpcClient;
                }

                /// <summary>
                /// 设置认证信息参数
                /// </summary>
                /// <param name="provider">认证信息提供对象</param>
                /// <returns>vpcClient 构造器</returns>
                public Builder CredentialsProvider(CredentialsProvider provider)
                {
                    vpcClient.credentialsProvider = provider;
                    return this;
                }

                /// <summary>
                /// 设置请求环境参数
                /// </summary>
                /// <param name="environment">环境参数信息</param>
                /// <returns>vpcClient 构造器</returns>
                public Builder Environment(SDKEnvironment environment)
                {
                    vpcClient.environment = environment;
                    return this;
                }

                /// <summary>
                /// http 请求配置信息
                /// </summary>
                /// <param name="config">http 请求配置信息</param>
                /// <returns>vpcClient 构造器</returns>
                public Builder HttpRequestConfig(HttpRequestConfig config)
                {
                    vpcClient.httpRequestConfig = config;
                    return this;
                }
            }
    }
}
